from migration.base_migrator import BaseMigrator
from utils.common import CommonUtils
import os

class RoutineMigrator(BaseMigrator):
    def __init__(self, mysql_db, kingbase_db, migration_config, logger, task_name):
        super().__init__(mysql_db, kingbase_db, migration_config, logger, task_name)
        self.routines_dir = os.path.join(self.reports_dir, 'routines')
        CommonUtils.ensure_directory_exists(self.routines_dir)
    
    def migrate_procedures_functions(self):
        """
        迁移存储过程和函数
        注意：MySQL和PostgreSQL的存储过程语法差异很大，这里提供基本支持
        """
        try:
            # 获取存储过程
            procedures = self.mysql_db.get_all_procedures()
            self.logger.info(f"共需要迁移 {len(procedures)} 个存储过程")
            
            # 获取函数
            functions = self.mysql_db.get_all_functions()
            self.logger.info(f"共需要迁移 {len(functions)} 个函数")
            
            # 处理存储过程
            for proc in procedures:
                proc_name = proc['ROUTINE_NAME']
                proc_def = proc['ROUTINE_DEFINITION']
                
                # 保存到文件（需要手动转换）
                proc_file = os.path.join(self.routines_dir, f"proc_{proc_name}.sql")
                CommonUtils.write_text_file(proc_file, f"-- 注意：需要手动将MySQL存储过程转换为PostgreSQL函数\n-- {proc_def}")
                self.logger.info(f"存储过程导出成功: {proc_file}")
            
            # 处理函数
            for func in functions:
                func_name = func['ROUTINE_NAME']
                func_def = func['ROUTINE_DEFINITION']
                
                # 保存到文件（需要手动转换）
                func_file = os.path.join(self.routines_dir, f"func_{func_name}.sql")
                CommonUtils.write_text_file(func_file, f"-- 注意：需要手动将MySQL函数转换为PostgreSQL函数\n-- {func_def}")
                self.logger.info(f"函数导出成功: {func_file}")
            
        except Exception as e:
            self.logger.error(f"存储过程和函数迁移失败\n{e}")